#pragma once

#include <vector>

class Tensor
{

private:
    std::vector<float> data_;
    std::vector<u_int32_t> shape_;
public:
    Tensor();
    Tensor(std::vector<float> data);
    Tensor(std::vector<u_int32_t> shape);

    void view(std::vector<u_int32_t> shape);
    std::vector<u_int32_t> getShape() const;
    std::vector<float> getData() const;
    std::vector<float> setData(std::vector<float> data);
    u_int32_t getSize() const;

    friend std::ostream& operator<<(std::ostream& os, const Tensor& obj);

    Tensor dot(Tensor tensor);

};
